#include <iostream>
#include <memory>


class Person
{
public:
    Person()
    {
        std::cout << "Person()" << std::endl;
    }

    Person(int age):m_age(age)
    {
        std::cout << "Person(int age)" << std::endl;
    }

    ~Person()
    {
        std::cout << "~Person()" << std::endl;
    }

public:// 成员函数尽量 单独在另一个 public中
    /* 成员函数 */
    void run()
    {
        std::cout << "run()--age : " << m_age << std::endl;
    }


private:
    int m_age;
    
};

int main(int argc, char *argv[])
{
    std::cout << "111" << std::endl;
    std::unique_ptr<Person> p2 = nullptr;
    {
        // 创建一个 unique_ptr，管理一个新的 Person 对象，传入参数 10
        std::unique_ptr<Person> p1(new Person(10));
        p1->run();

        // 将 p1 的所有权转移给 p2。p1 现在变为 nullptr，而 p2 管理 Person 对象
        p2 = std::move(p1);
        p2->run();
    }// 内部作用域结束，p1 离开作用域，但由于 p1 已经为空（nullptr），所以不会调用析构函数。
    std::cout << "222" << std::endl;
    std::cout << "333" << std::endl;

    // 在代码块结束时，unique_ptr<Person> p2 离开作用域，析构函数调用，Person 对象被销毁，输出 "~Person()"。
    return 0;
}